package final2107.night.day06;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class CharCountSort {
    public static void main(String[] args) {
        String str = "sdfjsjk123012830,.,f.ew,r./sjdfjskjf";
        //将字符串转换为字符数组
        char[] ary = str.toCharArray();
        //创建Map集合
        Map<Character,Integer> map = new LinkedHashMap<>();
        //遍历字符数组,将次数统计到map集合中
        for (char c:ary) {
            if (map.containsKey(c)){  //说明字符已经出现,让次数+1
                map.put(c,map.get(c)+1);
            }else {
                map.put(c,1);
            }
        }
        //得到的map集合,即为按照字符第一次出现的顺序排序后的结果
//        for (Map.Entry<Character,Integer> entry:map.entrySet()) {
//            System.out.println(entry.getKey()+"出现的次数是:"+entry.getValue());
//        }

        //实现根据字符的总次数降序排列 - 将map转换为list,自定义排序
        List<Map.Entry<Character,Integer>> list =
                new ArrayList<>(map.entrySet());
//        list.sort(new Comparator<Map.Entry<Character, Integer>>() {
//            @Override
//            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
//                return o2.getValue().compareTo(o1.getValue());
//            }
//        });
        //使用lambda表达式实现Comparator接口
        list.sort((o1,o2)-> o2.getValue().compareTo(o1.getValue()));

        list.forEach(e-> System.out.println(e.getKey()+"出现的次数是:"+e.getValue()));
    }
}
